/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function (nums) {
  //定义数组：存储所有路径
  let result = []
  //定义一个递归函数
  function backtrack(start, path) {
    //每次进入递归函数，先把当前路径path存入数组result
    result.push([...path])
    //从索引start开始遍历数组nums（避免重复的路径）
    for (let i = start; i < nums.length; i++) {
      path.push(nums[i])//数组元素nums[i]加入当前路径path
      backtrack(i + 1, path)//继续调用递归函数计算后续路径
      path.pop()//递归结束，数组元素nums[i]移出当前路径path
    }
  }
  //调用递归函数
  backtrack(0, [])
  //返回数组：返回所有路径
  return result
};
console.log(subsets([1, 2, 3]))